package com.wujie.mall.domain.payment;

import lombok.Data;
import lombok.Builder;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Map;

/**
 * 支付请求对象
 * 
 * @author wujie
 * @since 2024-08-26
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PaymentRequest {

    /**
     * 订单号
     */
    private String orderNo;

    /**
     * 支付金额
     */
    private BigDecimal amount;

    /**
     * 支付类型
     */
    private PaymentType paymentType;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 商品描述
     */
    private String subject;

    /**
     * 订单描述
     */
    private String body;

    /**
     * 异步通知地址
     */
    private String notifyUrl;

    /**
     * 同步返回地址
     */
    private String returnUrl;

    /**
     * 请求时间
     */
    private LocalDateTime requestTime;

    /**
     * 扩展参数
     */
    private Map<String, Object> extraParams;

    /**
     * 获取扩展参数
     * @param key 参数键
     * @param defaultValue 默认值
     * @return 参数值
     */
    @SuppressWarnings("unchecked")
    public <T> T getExtraParam(String key, T defaultValue) {
        if (extraParams == null) {
            return defaultValue;
        }
        return (T) extraParams.getOrDefault(key, defaultValue);
    }

    /**
     * 设置扩展参数
     * @param key 参数键
     * @param value 参数值
     */
    public void putExtraParam(String key, Object value) {
        if (extraParams == null) {
            extraParams = new java.util.HashMap<>();
        }
        extraParams.put(key, value);
    }
}